package util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.thoughtworks.xstream.XStream;


public class Persistencia {

	private XStream xstream;
	private static final String XML_IN = "entradas.xml";
	private static final String XML_OUT = "saidas.xml";
	private int numeroDaEntrada;

	public Persistencia(boolean limparSaida) {
		xstream = new XStream();
		xstream.setMode(XStream.NO_REFERENCES);
		numeroDaEntrada = 0;
		
		if(limparSaida){			
			File xmlOut = new File(XML_OUT);
			xmlOut.delete();
		}
	}
	
	public Entrada carregarEntrada(){

		List<Entrada> entradas;
		try {
			entradas = (List<Entrada>) xstream.fromXML(new FileInputStream(XML_IN));
		} catch (Exception e) {
			throw new RuntimeException(e.getMessage());
		}
		
		List<Resultado> saidas;
		try {
			saidas = (List<Resultado>) xstream.fromXML(new FileInputStream(XML_OUT));
		} catch (Exception e) {
			numeroDaEntrada = 0;
			return entradas.get(numeroDaEntrada);
		}

		numeroDaEntrada = saidas.size();
		return entradas.get(numeroDaEntrada);
	}
	
	public void salvarResultado(Resultado resultado){
		List<Resultado> saidas;
		try {
			saidas = (List<Resultado>) xstream.fromXML(new FileInputStream(XML_OUT));
		} catch (Exception e) {
			saidas = new ArrayList<Resultado>();
		}
		resultado.setNumeroDaEntrada(saidas.size());
		saidas.add(resultado);

		try {
			xstream.toXML(saidas, new FileOutputStream(XML_OUT));
		} catch (FileNotFoundException ex) {
			throw new RuntimeException(ex.getMessage());
		}		
	}

	public int getNumeroDaEntrada() {
		return numeroDaEntrada;
	}

	
}
